package cn.han.pool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/*多线程编程实现方案三：线程池的方式*/
public class Exercise4Runnable {
    public static void main(String[] args) {
        //创建实现类也就是目标业务类对象
        Runnablev1 r = new Runnablev1();
        //创建线程池
        /*Execytors是用来辅助创建线程池的工具类
        * 常用方法是：newFixedThreadPool(int)这个方法可以帮我们创建指定书目线程的线程池
        * */
        //使用Excutors工具创建一个最多包含5个线程的线程池
        ExecutorService pool = Executors.newFixedThreadPool(5);
        //使用循环启动线程
        for (int i = 0; i < 5; i++) {
            /*execute()让线程池中的线程来执行业务，
            每次调用这个方法，都会将一个线程加到就绪队列中
            这个方法的参数，就是我们要执行的具体业务，也就是目标业务类对象r*/
            pool.execute(r);
        }


    }
}

class Runnablev1 implements Runnable{
int thread = 100;
    @Override
    public void run() {
        while (true){
            synchronized (Runnablev1.class){
                if (thread>0){
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName()+"="+thread--);
                }if (thread<=0)break;
            }
        }
    }
}